From: Ian Campbell Date: Wed, 9 Apr 2014 11:51:15 +0000 (+0100) Subject: xen: arm: use same variables as userspace in dom0 builder place_modules() X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5236 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=00dea7acf444891f789aad213c871095422fe9d0;p=xen.git xen: arm: use same variables as userspace in dom0 builder place_modules() The placement algorithm should be effectively the same and using different variable names makes my head hurt when I try to compare. Signed-off-by: Ian Campbell Acked-by: Julien Grall --- diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c index ae86772e83..bc625a4d6c 100644 --- a/xen/arch/arm/kernel.c +++ b/xen/arch/arm/kernel.c @@ -65,25 +65,25 @@ void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len) } static void place_modules(struct kernel_info *info, - paddr_t kernel_start, - paddr_t kernel_end) + paddr_t kernbase, paddr_t kernend) { /* Align DTB and initrd size to 2Mb. Linux only requires 4 byte alignment */ const paddr_t initrd_len = ROUNDUP(early_info.modules.module[MOD_INITRD].size, MB(2)); const paddr_t dtb_len = ROUNDUP(fdt_totalsize(info->fdt), MB(2)); - const paddr_t total = initrd_len + dtb_len; + const paddr_t modsize = initrd_len + dtb_len; /* Convenient */ - const paddr_t mem_start = info->mem.bank[0].start; - const paddr_t mem_size = info->mem.bank[0].size; - const paddr_t mem_end = mem_start + mem_size; - const paddr_t kernel_size = kernel_end - kernel_start; + const paddr_t rambase = info->mem.bank[0].start; + const paddr_t ramsize = info->mem.bank[0].size; + const paddr_t ramend = rambase + ramsize; + const paddr_t kernsize = kernend - kernbase; + const paddr_t ram128mb = rambase + MB(128); - paddr_t addr; + paddr_t modbase; - if ( total + kernel_size > mem_size ) - panic("Not enough memory in the first bank for the dtb+initrd"); + if ( modsize + kernsize > ramsize ) + panic("Not enough memory in the first bank for the kernel+dtb+initrd"); /* * DTB must be loaded such that it does not conflict with the @@ -100,19 +100,19 @@ static void place_modules(struct kernel_info *info, * just after the kernel, if there is room, otherwise just before. */ - if ( kernel_end < MIN(mem_start + MB(128), mem_end - total) ) - addr = MIN(mem_start + MB(128), mem_end - total); - else if ( mem_end - ROUNDUP(kernel_end, MB(2)) >= total ) - addr = ROUNDUP(kernel_end, MB(2)); - else if ( kernel_start - mem_start >= total ) - addr = kernel_start - total; + if ( kernend < MIN(ram128mb, ramend - modsize) ) + modbase = MIN(ram128mb, ramend - modsize); + else if ( ramend - ROUNDUP(kernend, MB(2)) >= modsize ) + modbase = ROUNDUP(kernend, MB(2)); + else if ( kernbase - rambase >= modsize ) + modbase = kernbase - modsize; else { panic("Unable to find suitable location for dtb+initrd"); return; } - info->dtb_paddr = addr; + info->dtb_paddr = modbase; info->initrd_paddr = info->dtb_paddr + dtb_len; }